草庐IT

C++ : sharing fields between class and superclasses

全部标签

c++ - 为什么 'Base Class object' 不能调用它自己的虚函数? C++

我已经阅读了C++中的虚函数,并了解它们如何为程序员提供使用基类指针访问派生类成员函数的权限。(又名多态性)。一直困扰我的问题是:为什么要在基类中声明一个同名函数,如果最后它必须被声明为虚函数?(注意:我需要有关虚函数多态性方面的答案)在下面的代码中,如果使用基类指针调用“virtualdisplay()”(第22行),则会显示错误。为什么C++中的虚函数如此严格w.r.t.没有被基类指针调用?.#includeusingnamespacestd;classB{public:voidvirtualdisplay(){coutdisplay();Whycan't'b'callit'sow

c++ - Stroustrup Linearizing Class Hierarchies 示例说明

在Stroustrup的C++编程语言(第4版)中,第27.4.2节展示了一种“线性化”菱形类层次结构以避免虚拟基类开销的技术。他从一个真实项目(Pivotcodeanalyzertool)的菱形图案开始:线性版本绘制为:和代码大纲是:namespaceipr{structNode{...};structExpr:Node{...};structStmt:Expr{...};structDecl:Stmt{...};structVar:Decl{...};namespaceimpl{templatestructNode:T{...};templatestructExpr:Node{..

c++ - Mac 上的问题 : "Can' t find a register in class BREG while reloading asm"

我尝试将一些代码移植到MacOSX上。该程序使用了“ttmath”库,一个headerbig-numheader库。这个库在windows和linux上都运行良好,但是当我尝试在Mac上编译和运行它时,总是出现以下错误消息:"can'tfindaregisterinclass'BREG'whilereloading'asm'".我发现一些文档说这个问题是由于旧版本的GCC编译器(build5488)引起的,但在我更新GCC后仍然显示此消息。目前我的GCC版本是:i686-apple-darwin9-gcc-4.0.1(GCC)4.0.1(AppleInc.build5490)操作系统是

spring - 在抽象父类(super class)中注入(inject)spring依赖

我需要使用Spring框架在抽象父类(superclass)中注入(inject)依赖项。classAextendsAbstractClassB{privateXdaodaox;...publicsetXdao(){...}}classAbstractClassB{..privateyDaodaoy;publicseyYdao(){...}}每次实例化抽象类B时,我都需要传递父类(superclass)依赖项(在我的项目中可以以100种方式对其进行子类化)application.xml中的条目(spring上下文文件)如何在application.xml中创建父类(superclass

spring - 在抽象父类(super class)中注入(inject)spring依赖

我需要使用Spring框架在抽象父类(superclass)中注入(inject)依赖项。classAextendsAbstractClassB{privateXdaodaox;...publicsetXdao(){...}}classAbstractClassB{..privateyDaodaoy;publicseyYdao(){...}}每次实例化抽象类B时,我都需要传递父类(superclass)依赖项(在我的项目中可以以100种方式对其进行子类化)application.xml中的条目(spring上下文文件)如何在application.xml中创建父类(superclass

c++ - 在 C++11 标准中,它在哪里禁止 'template <typename T> class A {...}; template <typename T> class A<int> {...};'(如果有的话)?

我试图通过想象神秘的构造来更全面地掌握模板语法和语义。我认为C++11标准不允许使用以下语法:templateclassA{...};//phony"specialization"templateclassA{...};但是,我找不到在C++11标准中不允许使用此语法的地方。C++11标准不允许显示的语法是否正确?如果有,从哪里可以查到语法是不允许的? 最佳答案 令我感到非常惊讶的是,14.5.5[temp.class.spec]中没有明确声明必须在模板参数列表中使用类模板偏特化的所有模板参数。那将使templateclassA无效

c++ - 我如何让 main 成为我类(class)的 friend ?

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭11年前。我认为这是可能的,但编译器提示它无法访问我的类的protected/私有(private)成员。我试过四处移动东西并更改签名,但找不到有效的组合。我基本上有:classMyClass{public:friendintmain(intargc,char**argv);private:voidtest(){cout

c++ - 错误 : no type named ‘value_type’ in ‘class

我收到以下编译器错误:(graph_algorithms.h:59:111:error:notypenamed‘value_type’in‘classGraph::graph_algorithms::vertex_comparer’)这是什么意思?下一行给了我一大堆编译器错误std::priority_queue::vertex,typenameGraph::graph_algorithms::vertex_comparer>pri_que;#ifndefGRAPH_ALGORIUHMS_H_#defineGRAPH_ALGORIUHMS_H_#include#include"grap

c++ - 从 vector C++ 中的父类(super class)调用子类方法

我正在尝试将一些子类元素添加到一个vector中,遍历它们调用一个被覆盖的方法,并希望它在可能的情况下调用被覆盖的方法。但是我发现它似乎只调用父类(superclass)方法。我学过Java,但不确定为什么要在C++中这样做。我尝试使用父类(superclass)的指针vector重写代码并将子类的指针转换到父类(superclass)。然后通过指针访问它。理想情况下,我不想将指针列表放入vector中,因为我必须手动删除每个指针(我相信?)以阻止内存泄漏,因为我将使用new创建对象,以便它们持续到方法调用以将它们添加到vector中。有没有更好的方法来做到这一点,或者我是否坚持使用指

c++ - 构造函数执行顺序/顺序 : dependent initialization of static variable (class instance) in a function

对于以下代码段:classBar{public:intx;inty;Bar(int_x,int_y){/*somecodeshere*/...}};classFoo{public:intx;inty;intz;Foo(Barb):x(b.x),y(b.y){z=someFunction(x,y);}};voidf(intx,inty){Barb(x,y);staticFoox(b);}intmain(){f(2,3);}在我看来,函数内的静态变量甚至应该在main()之前初始化。但是,Foo类型的静态变量x依赖于Bar类型的局部变量b。问题是:1)x的构造函数什么时候执行?即x是在第一